package com.ht.api.hlink;

import javax.sql.DataSource;

import com.ht.api.db.Db;
import com.ht.api.db.Entity;
import com.ht.api.db.hlink.function.HlinkFunction;
import com.ht.api.open.OpenUtil;

import cn.hutool.core.util.StrUtil;
import cn.hutool.json.JSONArray;
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;

/**
 * 创建群的二维码
 * @author asq
 * @createTime 2025年3月26日 11:13:36
 */
public class CreateChatQrCode implements HlinkFunction<String> {
	/** 接口ID：配置客户群进群方式 */
	private static final long API_ID_ADD = 1900132334599016448L;
	/** 接口ID：获取客户群进群方式配置 */
	private static final long API_ID_QUERY = 1900132539570458624L;

	@Override
	public String format(DataSource ds, Object value, Entity wxGroupchat) {
		// 查询是否已有二维码，有的情况下，就不再重复创建
		String appId = wxGroupchat.getStr("tenant_appid");
		String chatId = wxGroupchat.getStr("chat_id");
		Entity old = Db.createSqlParser("wx_groupchat").where("tenant_appid", appId).where("chat_id", chatId).findOne(ds);
		if (old != null && StrUtil.isNotBlank(old.getStr("qr_code"))) {
			return null;
		}
		
		// 调用企微接口，新增“加入群聊”
		JSONArray chatIdList = JSONUtil.createArray();
		chatIdList.add(chatId);
		JSONObject wwxParam = JSONUtil.createObj();
		wwxParam.set("scene", 2);
		wwxParam.set("chat_id_list", chatIdList);
		String str = OpenUtil.call(appId, API_ID_ADD, wwxParam);

		// 解析返回结果，再调企微接口查询二维码地址
		JSONObject obj = JSONUtil.parseObj(str);
		if (obj.getInt("errcode") == 0) {
			String configId = obj.getStr("config_id");

			// 查询加入群聊的详细信息
			String str2 = OpenUtil.call(appId, API_ID_QUERY, JSONUtil.createObj().set("config_id", configId));
			JSONObject obj2 = JSONUtil.parseObj(str2);
			if (obj2.getInt("errcode") == 0) {
				return obj2.getByPath("join_way.qr_code", String.class);
			}
		}

		return null;
	}

}
